package com.zgis.monitor.util;

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class DateTimeUtils
{
    /**
     * 默认时区：亚洲/上海（东八区）
     */
    private static final ZoneId DEFAULT_ZONE_ID = ZoneId.of("Asia/Shanghai");

    /**
     * 默认日期时间格式：yyyy-MM-dd HH:mm:ss（如：2024-10-31 15:30:45）
     */
    private static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 将毫秒时间戳转换为默认格式的日期时间字符串（使用默认时区）
     *
     * @param millis 毫秒时间戳（如：System.currentTimeMillis()）
     * @return 格式化后的日期时间字符串，如 "2024-10-31 15:30:45"
     */
    public static String millisToDateTimeStr(long millis) {
        return millisToDateTimeStr(millis, DEFAULT_ZONE_ID, DEFAULT_FORMATTER);
    }

    /**
     * 自定义时区和格式，将毫秒时间戳转换为日期时间字符串
     *
     * @param millis    毫秒时间戳
     * @param zoneId    时区（如：ZoneId.of("UTC")、ZoneId.of("America/New_York")）
     * @param formatter 日期时间格式（如：DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm")）
     * @return 格式化后的日期时间字符串
     */
    public static String millisToDateTimeStr(long millis, ZoneId zoneId, DateTimeFormatter formatter) {
        // 毫秒 -> Instant（UTC时间）-> 绑定到指定时区 -> 格式化
        return Instant.ofEpochMilli(millis)
                .atZone(zoneId)
                .toLocalDateTime()
                .format(formatter);
    }

    /**
     * 获取当前时间的默认格式字符串（快捷方法）
     *
     * @return 当前时间字符串，如 "2024-10-31 15:30:45"
     */
    public static String getCurrentTimeStr() {
        return millisToDateTimeStr(System.currentTimeMillis());
    }
}
